home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / texte / qed / src / options.c < prev    next >
C/C++ Source or Header  |  1998-11-09  |  34KB  |  1,341 lines

  1. #include <support.h>
  2.  
  3. #include "global.h"
  4. #include "av.h"
  5. #include "ausgabe.h"
  6. #include "clipbrd.h"
  7. #include "edit.h"
  8. #include "error.h"
  9. #include "file.h"
  10. #include "find.h"
  11. #include "icon.h"
  12. #include "kurzel.h"
  13. #include "makro.h"
  14. #include "memory.h"
  15. #include "poslist.h"
  16. #include "printer.h"
  17. #include "projekt.h"
  18. #include "rsc.h"
  19. #include "se.h"
  20. #include "set.h"
  21. #include "text.h"
  22. #include "version.h"
  23. #include "window.h"
  24. #include "winlist.h"
  25. #include "options.h"
  26.  
  27. extern void    menu_help(int title, int item);
  28.  
  29. static char    buffer[MAX_LINE_LEN];
  30.  
  31.  
  32. /*
  33.  * Autosave
  34. */
  35. bool    as_text, as_prj;
  36. bool    as_text_ask, as_prj_ask;
  37. int    as_text_min, as_prj_min;
  38.  
  39. void set_autosave_options(void)
  40. {
  41.     int    antw;
  42.  
  43.     set_state(autosave, ASTEXT, SELECTED, as_text);
  44.     set_int(autosave, ASTMIN, as_text_min);
  45.     set_state(autosave, ASTASK, SELECTED, as_text_ask);
  46.  
  47.     set_state(autosave, ASPROJ, SELECTED, as_prj);
  48.     set_int(autosave, ASPMIN, as_prj_min);
  49.     set_state(autosave, ASPASK, SELECTED, as_prj_ask);
  50.  
  51.     antw = simple_mdial(autosave, ASTMIN) & 0x7fff;
  52.     if (antw == ASOK)
  53.     {
  54.         as_text = get_state(autosave, ASTEXT, SELECTED);
  55.         as_text_min = get_int(autosave, ASTMIN);
  56.         if (as_text_min == 0)
  57.             as_text = FALSE;
  58.         if (as_text_min > 59)
  59.             as_text_min = 59;
  60.         as_text_ask = get_state(autosave, ASTASK, SELECTED);
  61.  
  62.         as_prj = get_state(autosave, ASPROJ, SELECTED);
  63.         as_prj_min = get_int(autosave, ASPMIN);
  64.         if (as_prj_min == 0)
  65.             as_prj = FALSE;
  66.         if (as_prj_min > 59)
  67.             as_prj_min = 59;
  68.         as_prj_ask = get_state(autosave, ASPASK, SELECTED);
  69.  
  70.         do_all_icon(ALL_TYPES, DO_AUTOSAVE);
  71.     }
  72. }
  73.  
  74.  
  75. /*
  76.  * Globale Optionen
  77. */
  78. bool    clip_on_disk, wind_cycle, f_to_desk;
  79. int    transfer_size, bin_line_len;
  80. int    fg_color, bg_color;
  81. bool    save_opt, overwrite, blinking_cursor, ctrl_mark_mode;
  82. PATH    helpprog;
  83. char    bin_extension[BIN_ANZ][MUSTER_LEN+1];
  84.  
  85. static void do_avopen(WINDOWP window)
  86. {
  87.     send_avwinopen(window->handle);
  88. }
  89.  
  90. static void do_avclose(WINDOWP window)
  91. {
  92.     send_avwinclose(window->handle);
  93. }
  94.  
  95. static void set_popcolor(int s_obj, int d_obj)
  96. {
  97.     OBSPEC    spec;
  98.     int        color;
  99.                     
  100.     spec.index = get_obspec(popups, s_obj);
  101.     color = spec.obspec.interiorcol;            /* neue Farbe holen */
  102.     spec.index = get_obspec(globalop, d_obj);
  103.     spec.obspec.interiorcol = color;            /* neue Farbe setzen */
  104.     set_obspec(globalop, d_obj, spec.index);
  105. }
  106.  
  107.  
  108. void set_global_options(void)
  109. {
  110.     int    antw, i;
  111.     bool    old_cycle, new_cycle, new_fg, new_bg;
  112.     bool    close = FALSE;
  113.     char    n[23] = "";
  114.     MDIAL    *dial;
  115.     PATH    new_helpprog;
  116.     
  117.     old_cycle = wind_cycle;
  118.     set_state(globalop, GOASAVE, SELECTED, save_opt);
  119.     set_state(globalop, GOCLIP, DISABLED, (clip_dir[0] == EOS));
  120.     set_state(globalop, GOCLIP, SELECTED, clip_on_disk);
  121.     set_state(globalop, GOBLINK, SELECTED, blinking_cursor);
  122.     set_state(globalop, GOCTRL, SELECTED, ctrl_mark_mode);
  123.     set_state(globalop, GOAVWIN, SELECTED, wind_cycle);
  124.     set_state(globalop, GOAVKEY, SELECTED, f_to_desk);
  125.  
  126.     set_state(globalop, GOWDIAL, DISABLED, !prn->pdlg_avail);
  127.     set_state(globalop, GOWDIAL, SELECTED, prn->use_pdlg);
  128.  
  129.     set_int(globalop, GOTRANS, transfer_size);
  130.  
  131.     if (helpprog[0] != EOS)
  132.         make_shortpath(helpprog, n, 22);
  133.     else
  134.         strcpy(n, "");
  135.     set_string(globalop, GOHELPNAME, n);
  136.     strcpy(new_helpprog, helpprog);
  137.  
  138.     set_int(globalop, GOBLEN, bin_line_len);
  139.     for (i = 4; i < BIN_ANZ; i++)
  140.         set_string(globalop, i - 4 + GOBEXT1, bin_extension[i]);
  141.  
  142.     get_string(popups, fg_color + CPWHITE, n);
  143.     set_string(globalop, GOFCPOP, n);
  144.     set_popcolor(fg_color + CPWHITE - 16, GOFCOL);
  145.     get_string(popups, bg_color + CPWHITE, n);
  146.     set_string(globalop, GOBCPOP, n);
  147.     set_popcolor(bg_color + CPWHITE - 16, GOBCOL);
  148.     new_fg = fg_color;
  149.     new_bg = bg_color;
  150.  
  151.     dial = open_mdial(globalop, GOTRANS);
  152.     if (dial != NULL)
  153.     {
  154.         while (!close)
  155.         {
  156.             antw = do_mdial(dial) & 0x7fff;
  157.             switch (antw)
  158.             {                
  159.                 case GOHELP :
  160.                     menu_help(TOPTIONS, MGLOBALO);
  161.                     break;
  162.                     
  163.                 case GOHELPSEL :
  164.                     if (select_single(new_helpprog, "", rsc_string(FINDHPSTR)))
  165.                     {
  166.                         make_shortpath(new_helpprog, n, 22);
  167.                         set_string(globalop, GOHELPNAME, n);
  168.                         redraw_mdobj(dial, GOHELPNAME);
  169.                     }
  170.                     break;
  171.         
  172.                 case GOFCSTR :
  173.                 case GOFCPOP :
  174.                     if (antw == GOFCPOP)
  175.                         i = handle_popup(globalop, GOFCPOP, popups, COLORPOP, POP_OPEN);
  176.                     else
  177.                         i = handle_popup(globalop, GOFCPOP, popups, COLORPOP, POP_CYCLE);
  178.                     if (i > 0)
  179.                     {
  180.                         set_popcolor(i - 16, GOFCOL);
  181.                         redraw_mdobj(dial, GOFCOL);
  182.                         new_fg = i - CPWHITE;
  183.                     }
  184.                     break;
  185.  
  186.                 case GOBCSTR :
  187.                 case GOBCPOP :
  188.                     if (antw == GOBCPOP)
  189.                         i = handle_popup(globalop, GOBCPOP, popups, COLORPOP, POP_OPEN);
  190.                     else
  191.                         i = handle_popup(globalop, GOBCPOP, popups, COLORPOP, POP_CYCLE);
  192.                     if (i > 0)
  193.                     {
  194.                         set_popcolor(i - 16, GOBCOL);
  195.                         redraw_mdobj(dial, GOBCOL);
  196.                         new_bg = i - CPWHITE;
  197.                     }
  198.                     break;
  199.  
  200.                 default:
  201.                     close = TRUE;
  202.                     break;
  203.             }
  204.             if (!close)
  205.             {
  206.                 set_state(globalop, antw, SELECTED, FALSE);
  207.                 redraw_mdobj(dial, antw);
  208.             }
  209.         }
  210.         set_state(globalop, antw, SELECTED, FALSE);
  211.         close_mdial(dial);
  212.         if (antw == GOOK)
  213.         {
  214.             save_opt = get_state(globalop, GOASAVE, SELECTED);
  215.             if (clip_dir[0] != EOS)
  216.                 clip_on_disk = get_state(globalop, GOCLIP, SELECTED);
  217.             blinking_cursor = get_state(globalop, GOBLINK, SELECTED);
  218.             ctrl_mark_mode = get_state(globalop, GOCTRL, SELECTED);
  219.             prn->use_pdlg = get_state(globalop, GOWDIAL, SELECTED);
  220.             transfer_size = get_int(globalop, GOTRANS);
  221.             if (transfer_size == 0)
  222.                 transfer_size = 1;
  223.     
  224.             new_cycle = get_state(globalop, GOAVWIN, SELECTED);
  225.             if (old_cycle && !new_cycle)                        /* war an, nun aus */
  226.             {
  227.                 do_all_window(CLASS_ALL, do_avclose);
  228.                 wind_cycle = new_cycle;
  229.             }
  230.             if (new_cycle && !old_cycle)                        /* nun an, war aus */
  231.             {
  232.                 wind_cycle = new_cycle;
  233.                 do_all_window(CLASS_ALL, do_avopen);
  234.             }
  235.             f_to_desk = get_state(globalop, GOAVKEY, SELECTED);
  236.     
  237.             bin_line_len = get_int(globalop, GOBLEN);
  238.             if (bin_line_len < 1) 
  239.                 bin_line_len = 1;
  240.             if (bin_line_len > MAX_LINE_LEN) 
  241.                 bin_line_len = MAX_LINE_LEN;
  242.             for (i = 4; i < BIN_ANZ; i++)
  243.                 get_string(globalop, i - 4 + GOBEXT1, bin_extension[i]);
  244.     
  245.             strcpy(helpprog, new_helpprog);
  246.  
  247.             if (new_fg != fg_color || new_bg != bg_color) 
  248.             {
  249.                 fg_color = new_fg;
  250.                 bg_color = new_bg;
  251.                 color_change();
  252.             }
  253.         }
  254.     }
  255. }
  256.  
  257. /*
  258.  * Klammerpaare
  259. */
  260. char    klammer_auf[11],
  261.         klammer_zu[11];
  262.  
  263. void set_klammer_options(void)
  264. {
  265.     int    antw;
  266.     char    s1[11], s2[11];
  267.     
  268.     set_string(klammer, KPAUF, klammer_auf);
  269.     set_string(klammer, KPZU, klammer_zu);
  270.     antw = simple_mdial(klammer, KPAUF);
  271.     if (antw == KPOK)
  272.     {
  273.         get_string(klammer, KPAUF, s1);
  274.         get_string(klammer, KPZU, s2);
  275.         if (strlen(s1) == strlen(s2))
  276.         {
  277.             strcpy(klammer_auf, s1);
  278.             strcpy(klammer_zu, s2);
  279.         }
  280.         else
  281.             note(1, 0, KLAMMERERR);
  282.     }
  283. }
  284.  
  285.  
  286.  
  287. /*
  288.  * Lokale Optionen
  289. */
  290. LOCOPT    local_options[LOCAL_ANZ];
  291.  
  292. static int     active_local_option;
  293. static bool    krz_changed = FALSE;
  294.  
  295. static void null_locopt(LOCOPT *lo)
  296. {
  297.     strcpy(lo->muster, "");
  298.     lo->tab = FALSE;
  299.     lo->tabsize = 8;
  300.     lo->einruecken = FALSE;
  301.     strcpy(lo->wort_str,"A-Za-z0-9");
  302.     str2set(lo->wort_str,lo->wort_set);
  303.     lo->umbrechen  = FALSE;
  304.     lo->format_by_load = FALSE;
  305.     lo->format_by_paste = FALSE;
  306.     strcpy(lo->umbruch_str,"");
  307.     str2set(lo->umbruch_str,lo->umbruch_set);
  308.     lo->lineal_len = 0;
  309.     strcpy(lo->backup_ext, "");
  310.     lo->backup = FALSE;
  311.     lo->show_end = FALSE;
  312. }
  313.  
  314. static void option_fill(void)
  315. {
  316.     char         str[13] = "";
  317.     LOCOPTP    lo;
  318.  
  319.     lo = &local_options[active_local_option];
  320.  
  321.     set_state(localop, OTAB, SELECTED, lo->tab);
  322.     set_int(localop, OTABSIZE, lo->tabsize);
  323.     set_state(localop, OEINRUCK, SELECTED, lo->einruecken);
  324.     set_string(localop, OWORT, lo->wort_str);
  325.     set_state(localop, OUMBRUCH, SELECTED, lo->umbrechen);
  326.     set_state(localop, OFORMLOAD, SELECTED, lo->format_by_load);
  327.     set_state(localop, OFORMPASTE, SELECTED, lo->format_by_paste);
  328.     set_string(localop, OUMBTEXT, lo->umbruch_str);
  329.     set_state(localop, OBACKUP, SELECTED, lo->backup);
  330.     set_string(localop, OEXT, lo->backup_ext);
  331.     set_int(localop, OLINEAL, lo->lineal_len);
  332.     if (lo->kurzel[0] != EOS)
  333.         file_name(lo->kurzel, str, FALSE);
  334.     else
  335.         strcpy(str, rsc_string(KURZELSTR));
  336.     set_string(localop, OKURZELNAME, str);
  337.     set_state(localop, OSHOWEND, SELECTED, lo->show_end);
  338. }
  339.  
  340. static void option_get(void)
  341. {
  342.     LOCOPTP    lo;
  343.  
  344.     lo = &local_options[active_local_option];
  345.     lo->tab = get_state(localop, OTAB, SELECTED);
  346.     lo->tabsize = get_int(localop, OTABSIZE);
  347.     if (lo->tabsize < 1 || lo->tabsize > 50)
  348.         lo->tabsize = 3;
  349.     lo->umbrechen = get_state(localop, OUMBRUCH, SELECTED);
  350.     lo->einruecken = get_state(localop, OEINRUCK, SELECTED);
  351.     get_string(localop, OUMBTEXT, lo->umbruch_str);
  352.     str2set(lo->umbruch_str,lo->umbruch_set);
  353.     lo->format_by_load = get_state(localop, OFORMLOAD, SELECTED);
  354.     lo->format_by_paste = get_state(localop, OFORMPASTE, SELECTED);
  355.     lo->backup = get_state(localop, OBACKUP, SELECTED);
  356.     get_string(localop, OEXT, lo->backup_ext);
  357.     lo->lineal_len = get_int(localop, OLINEAL);
  358.     if (lo->lineal_len < 3 || lo->lineal_len > MAX_LINE_LEN) 
  359.         lo->lineal_len = 65;
  360.     get_string(localop, OWORT, lo->wort_str);
  361.     str2set(lo->wort_str,lo->wort_set);
  362.     lo->show_end = get_state(localop, OSHOWEND, SELECTED);
  363. }
  364.  
  365.  
  366. static void config_muster(void)
  367. {
  368.     int    i, antw;
  369.     char     str[MUSTER_LEN+1];
  370.  
  371.     for (i = MFIRST; i <= MLAST; i++)
  372.         set_string(muster, i, local_options[i + 2 - MFIRST].muster);
  373.  
  374.     antw = simple_mdial(muster, MFIRST);
  375.     if (antw == MOK)
  376.     {
  377.         for (i = MFIRST; i <= MLAST; i++)
  378.         {
  379.             get_string(muster, i, str);
  380.             strcpy(local_options[i + 2 - MFIRST].muster, str);
  381.         }
  382.  
  383.         /* wurde der aktive gelöscht? */
  384.         if (local_options[active_local_option].muster[0] == EOS)
  385.         {
  386.             active_local_option = 0;
  387.             set_string(localop, OTYPE, " *");
  388.         }
  389.     }
  390. }
  391.  
  392.  
  393. static bool build_popup(POPUP *pop)
  394. {
  395.     char    str[MUSTER_LEN + 4];
  396.     int    i;
  397.  
  398.     strcpy(str, " ");
  399.     strcat(str, local_options[0].muster);
  400.     create_popup(pop, LOCAL_ANZ, MUSTER_LEN+2, str);
  401.  
  402.     strcpy(str, " ");
  403.     strcat(str, local_options[1].muster);
  404.     append_popup(pop, str);
  405.  
  406.     for (i = 2; i < LOCAL_ANZ; i++)
  407.     {
  408.         if (local_options[i].muster[0] != EOS)
  409.         {
  410.             strcpy(str, " *.");
  411.             strcat(str, local_options[i].muster);
  412.             append_popup(pop, str);
  413.         }
  414.     }
  415.  
  416.     return (pop->tree != NULL);
  417. }
  418.  
  419.  
  420. void set_local_options(void)
  421. {
  422.     int        antw, y;
  423.     WINDOWP     window;
  424.     PATH        save_name;
  425.     char         str[MUSTER_LEN + 2];
  426.     POPUP        pop;
  427.     bool        close = FALSE;
  428.     MDIAL        *dial;
  429.     LOCOPT    *backup;
  430.     
  431.     active_local_option = 0;
  432.     window = winlist_top();
  433.  
  434.     if ((window != NULL) && (window->class == CLASS_EDIT))
  435.     {
  436.         TEXTP t_ptr = get_text(window->handle);
  437.  
  438.         active_local_option = (int)(t_ptr->loc_opt - local_options);
  439.     }
  440.     if (active_local_option < 2)
  441.         strcpy(str, " ");
  442.     else
  443.         strcpy(str, " *.");
  444.     strcat(str, local_options[active_local_option].muster);
  445.  
  446.     backup = (LOCOPT *)malloc(LOCAL_ANZ * sizeof(LOCOPT));
  447.     memcpy(backup, local_options, (LOCAL_ANZ * sizeof(LOCOPT)));
  448.     
  449.     set_string(localop, OTYPE, str);
  450.     option_fill();
  451.     strcpy(save_name, local_options[active_local_option].kurzel);
  452.  
  453.     build_popup(&pop);
  454.     
  455.     dial = open_mdial(localop, OTABSIZE);
  456.     if (dial != NULL)
  457.     {
  458.         while (!close)
  459.         {
  460.             antw = do_mdial(dial) & 0x7fff;
  461.             switch (antw)
  462.             {
  463.                 case OTYPESTR :
  464.                 case OTYPE :
  465.                     if (antw == OTYPE && shift_pressed())
  466.                     {
  467.                         config_muster();
  468.                         option_fill();
  469.         
  470.                         /* Popup neu aufbauen */
  471.                         free_popup(&pop);
  472.                         build_popup(&pop);
  473.                     }
  474.                     else
  475.                     {
  476.                         if (antw == OTYPE)
  477.                             y = handle_popup(localop, OTYPE, pop.tree, 0, POP_OPEN) - 1;
  478.                         else
  479.                             y = handle_popup(localop, OTYPE, pop.tree, 0, POP_CYCLE) - 1;
  480.                         if (y >= 0 && y != active_local_option)
  481.                         {
  482.                             option_get();
  483.                             active_local_option = y;
  484.                             option_fill();
  485.                             redraw_mdobj(dial, OBOX);
  486.                         }
  487.                     }
  488.                     break;
  489.                 case OKURZEL:
  490.                     if (shift_pressed())
  491.                     {
  492.                         strcpy(local_options[active_local_option].kurzel, "");
  493.                         krz_changed = TRUE;
  494.                         set_string(localop, OKURZELNAME, rsc_string(KURZELSTR));
  495.                         redraw_mdobj(dial, OKURZELNAME);
  496.                     }
  497.                     else
  498.                     {
  499.                         if (select_single(local_options[active_local_option].kurzel, 
  500.                                                 "*.krz", rsc_string(FINDKURZELSTR)))
  501.                         {
  502.                             FILENAME str;
  503.                             
  504.                             file_name(local_options[active_local_option].kurzel, str, FALSE);
  505.                             krz_changed = TRUE;
  506.                             set_string(localop, OKURZELNAME, str);
  507.                         }
  508.                     }
  509.                     break;
  510.         
  511.                 case LCHELP :
  512.                     menu_help(TOPTIONS, MLOCALOP);
  513.                     break;
  514.  
  515.                 default:
  516.                     close = TRUE;
  517.                     break;
  518.             }
  519.             if (!close)
  520.             {
  521.                 set_state(localop, antw, SELECTED, FALSE);
  522.                 redraw_mdobj(dial, antw);
  523.             }
  524.         }
  525.         set_state(localop, antw, SELECTED, FALSE);
  526.         close_mdial(dial);
  527.         free_popup(&pop);
  528.  
  529.         if (antw == OOK)
  530.         {
  531.             option_get();
  532.             update_loc_opt();
  533.             absatz_edit();
  534.             ch_kurzel(local_options[active_local_option].kurzel, TRUE);
  535.         }
  536.         else
  537.         {
  538.             strcpy(local_options[active_local_option].kurzel, save_name);
  539.             memcpy(local_options, backup, (LOCAL_ANZ * sizeof(LOCOPT)));
  540.         }
  541.         free(backup);
  542.     }
  543. }
  544.  
  545.  
  546. /*
  547.  * Defaulteinstellungen
  548. */
  549. void init_default_var(void)
  550. {
  551.     int         i;
  552.     char        *c;
  553.  
  554.     font_id = 1;
  555.     font_pts = 10;
  556.  
  557.     s_grkl     = FALSE;
  558.     s_vorw      = TRUE;
  559.     s_global      = TRUE;
  560.     s_quant    = FALSE;
  561.     s_wort      = FALSE;
  562.     s_round      = FALSE;
  563.     r_modus      = RP_FIRST;
  564.     s_str[0] = EOS;
  565.     r_str[0] = EOS;
  566.     ff_rekursiv= FALSE;
  567.     ff_mask[0] = EOS;
  568.     for (i = 0; i < HIST_ANZ; i++)
  569.     {
  570.         s_history[i][0] = EOS;
  571.         r_history[i][0] = EOS;
  572.     }
  573.     rp_box_x      = 0;
  574.     rp_box_y      = 0;
  575.  
  576.     save_opt      = FALSE;
  577.     wind_cycle = FALSE;
  578.     clip_on_disk = TRUE;
  579.     overwrite  = FALSE;
  580.     transfer_size = 100;
  581.  
  582.     c = getenv("STGUIDE");
  583.     if (c != NULL)
  584.         strcpy(helpprog, c);
  585.     else
  586.         helpprog[0] = EOS;
  587.         
  588.     blinking_cursor = TRUE;
  589.     ctrl_mark_mode = FALSE;
  590.     f_to_desk = FALSE;
  591.     
  592.     for (i = 0; i < FEHLERANZ; i++)
  593.         error[i][0] = EOS;
  594.  
  595.     for (i = 0; i < LOCAL_ANZ; i++)
  596.         null_locopt(&local_options[i]);
  597.  
  598.     /* Default 1: * */
  599.     strcpy(local_options[0].muster, "*");
  600.     local_options[0].tab        = TRUE;
  601.     local_options[0].tabsize    = 8;
  602.     local_options[0].einruecken = TRUE;
  603.     strcpy(local_options[0].umbruch_str,"- \t");
  604.     str2set(local_options[0].umbruch_str,local_options[0].umbruch_set);
  605.     local_options[0].lineal_len = 70;
  606.     strcpy(local_options[0].backup_ext, "BAK");
  607.     local_options[0].backup = FALSE;
  608.     local_options[0].show_end = FALSE;
  609.  
  610.     /* Default 2: Binär */
  611.     strcpy(local_options[1].muster, rsc_string(BINSTR));
  612.     local_options[1].tab = FALSE;
  613.     local_options[1].tabsize = 1;
  614.     strcpy(local_options[1].backup_ext, "BAK");
  615.     local_options[1].backup = TRUE;
  616.  
  617.     strcpy(bin_extension[0], "prg");
  618.     strcpy(bin_extension[1], "app");
  619.     strcpy(bin_extension[2], "tos");
  620.     strcpy(bin_extension[3], "ttp");
  621.     for (i = 4; i < BIN_ANZ; i++)    
  622.         bin_extension[i][0] = EOS;
  623.  
  624.     se_autosave = FALSE;
  625.     se_autosearch = FALSE;
  626.     for (i = 0; i < SHELLANZ; i++)
  627.     {
  628.         se_shells[i].name[0] = EOS;
  629.         se_shells[i].makefile[0] = EOS;
  630.     }
  631.  
  632.     umlaut_from = 0;
  633.     umlaut_to = 0;
  634.  
  635.     as_text         = FALSE;
  636.     as_text_min = 0;
  637.     as_text_ask = FALSE;
  638.     as_prj         = FALSE;
  639.     as_prj_min = 0;
  640.     as_prj_ask = FALSE;
  641.  
  642.     bin_line_len = 80;
  643.  
  644.     strcpy(klammer_auf, "({[<\"\'");
  645.     strcpy(klammer_zu, ")}]>\"\'");
  646.  
  647.     fg_color = BLACK;
  648.     bg_color = WHITE;
  649. }
  650.  
  651.  
  652. /*
  653.  * Datei
  654. */
  655. #define CFGNAME    "qed.cfg"
  656.  
  657. static PATH            cfg_path = "";
  658. static FILENAME    dsp_name;            /* Name der Display-Datei */
  659. static FILE            *fd;
  660. static LOCOPTP        lo = NULL;
  661. static int            muster_nr = 1;
  662.  
  663. static bool get_cfg_path(void)
  664. {
  665.     bool    found = FALSE;
  666.     PATH    env, p_for_save = "";
  667.     
  668.     if (path_from_env("QED", cfg_path))            /* 1. $QED */
  669.     {
  670.         strcat(cfg_path, CFGNAME);
  671.         strcpy(p_for_save, cfg_path);
  672.         found = file_exists(cfg_path);
  673.     }
  674.  
  675.     if (!found && path_from_env("HOME", env))    /* 2. $HOME */
  676.     {
  677.         bool    h = FALSE;
  678.         
  679.         strcpy(cfg_path, env);
  680.         strcat(cfg_path, CFGNAME);
  681.         if (p_for_save[0] == EOS)
  682.         {
  683.             h = TRUE;
  684.             strcpy(p_for_save, cfg_path);
  685.         }
  686.         found = file_exists(cfg_path);
  687.         if (!found)                                        /* 2a. $HOME/defaults */
  688.         {
  689.             strcpy(cfg_path, env);
  690.             strcat(cfg_path, "defaults\\");
  691.             if (path_exists(cfg_path))
  692.             {
  693.                 strcat(cfg_path, CFGNAME);
  694.                 if (p_for_save[0] == EOS || h)
  695.                     strcpy(p_for_save, cfg_path);
  696.                 found = file_exists(cfg_path);
  697.             }
  698.         }        
  699.     }
  700.  
  701.     if (!found && gl_appdir[0] != EOS)            /* 3. Startverzeichnis */
  702.     {
  703.         strcpy(cfg_path, gl_appdir);
  704.         strcat(cfg_path, CFGNAME);
  705.         if (p_for_save[0] == EOS)
  706.             strcpy(p_for_save, cfg_path);
  707.         found = file_exists(cfg_path);
  708.     }
  709.  
  710.     if (!found && file_exists(CFGNAME))            /* 4. aktuelles Verzeichnis */
  711.     {
  712.         get_path(cfg_path, 0);
  713.         strcat(cfg_path, CFGNAME);
  714.         if (p_for_save[0] == EOS)
  715.             strcpy(p_for_save, cfg_path);
  716.         found = TRUE;
  717.     }
  718.  
  719.     if (!found)
  720.         strcpy(cfg_path, p_for_save);
  721.  
  722.     sprintf(dsp_name, "%04d%04d.qed", gl_desk.g_x + gl_desk.g_w, gl_desk.g_y + gl_desk.g_h);
  723. /*
  724. debug("cfg_path: %s (%d)\n", cfg_path, found);
  725. */
  726.     return found;
  727. }
  728.  
  729. /******************************************************************************/
  730. /* Dateioperation: Laden                                                                        */
  731. /******************************************************************************/
  732. void read_cfg_bool(char *str, bool *val)
  733. {
  734.     if (stricmp(str, "TRUE") == 0)
  735.         *val = TRUE;
  736.     if (stricmp(str, "FALSE") == 0)
  737.         *val = FALSE;
  738. }
  739.  
  740. void read_cfg_str(char *str, char *val)
  741. {
  742.     val[0] = EOS;
  743.     if ((str[0] == '"') && (str[1] == '"'))    /* nur "" -> leer */
  744.         return;
  745.     else
  746.     {
  747.         int    len, i, j;
  748.         
  749.         if (str[0] == '"')
  750.         {
  751.             len = (int)strlen(str);
  752.             j = 0;
  753.             i = 1;
  754.             while ((str[i] != '\"') && (i < len))
  755.             {
  756.                 if ((str[i] == '\\') && (str[i+1] == '"'))
  757.                     i++;
  758.                 val[j++] = str[i++];
  759.             }
  760.             val[j] = EOS;
  761.         }
  762.     }
  763. }
  764.  
  765.  
  766. static void parse_line(POSENTRY **arglist, char *zeile)
  767. {
  768.     char    var[30], *p, tmp[80];
  769.     int    x, i, d;
  770.     long    y;
  771.     PATH    filename;
  772.                     
  773.     p = strchr(zeile, '=');
  774.     if (p != NULL)
  775.     {
  776.         strncpy(var, zeile, p-zeile);
  777.         var[p-zeile] = EOS;
  778.         strcpy(buffer, p+1);
  779.  
  780.         /* Autosave */
  781.         if (strcmp(var, "AutoSavePrj") == 0)
  782.             read_cfg_bool(buffer, &as_prj);
  783.         else if(strcmp(var, "AutoSavePrjAsk") == 0)
  784.             read_cfg_bool(buffer, &as_prj_ask);
  785.         else if(strcmp(var, "AutoSavePrjMin") == 0)
  786.             as_prj_min = atoi(buffer);
  787.         else if(strcmp(var, "AutoSaveText") == 0)
  788.             read_cfg_bool(buffer, &as_text);
  789.         else if(strcmp(var, "AutoSaveTextAsk") == 0)
  790.             read_cfg_bool(buffer, &as_text_ask);
  791.         else if(strcmp(var, "AutoSaveTextMin") == 0)
  792.             as_text_min = atoi(buffer);
  793.  
  794.         /* Binär-Extensions */
  795.         else if (strcmp(var, "BinExtension") == 0)
  796.         {
  797.             read_cfg_str(buffer, tmp);
  798.             for (i = 0; i < BIN_ANZ; i++)
  799.             {
  800.                 if (stricmp(bin_extension[i], tmp) == 0)    /* schon drin */
  801.                     break;
  802.                 if (bin_extension[i][0] == EOS)
  803.                 {
  804.                     strcpy(bin_extension[i], tmp);
  805.                     break;
  806.                 }
  807.             }
  808.         }
  809.  
  810.         /* DefaultPrj */
  811.         else if(strcmp(var, "DefaultPrj") == 0)
  812.         {
  813.             read_cfg_str(buffer, def_prj_path);
  814.             set_def_prj();
  815.         }
  816.         
  817.         /* Fehlerzeilen */
  818.         else if(strcmp(var, "Error") == 0)
  819.         {
  820.             read_cfg_str(buffer, tmp);
  821.             set_errorline(tmp);
  822.         }
  823.         
  824.         /* Globales */
  825.         else if (strcmp(var, "GlobalAutosaveCfg") == 0)
  826.             read_cfg_bool(buffer, &save_opt);
  827.         else if (strcmp(var, "GlobalBgColor") == 0)
  828.             bg_color = atoi(buffer);
  829.         else if (strcmp(var, "GlobalBinLineLen") == 0)
  830.             bin_line_len = atoi(buffer);
  831.         else if (strcmp(var, "GlobalBlinkCursor") == 0)
  832.             read_cfg_bool(buffer, &blinking_cursor);
  833.         else if (strcmp(var, "GlobalCtrlBlock") == 0)
  834.             read_cfg_bool(buffer, &ctrl_mark_mode);
  835.         else if (strcmp(var, "GlobalFgColor") == 0)
  836.             fg_color = atoi(buffer);
  837.         else if (strcmp(var, "GlobalFtoDesk") == 0)
  838.             read_cfg_bool(buffer, &f_to_desk);
  839.         else if (strcmp(var, "GlobalGEMClip") == 0)
  840.             read_cfg_bool(buffer, &clip_on_disk);
  841.         else if (strcmp(var, "GlobalOverwrite") == 0)
  842.             read_cfg_bool(buffer, &overwrite);
  843.         else if (strcmp(var, "GlobalTransSize") == 0)
  844.             transfer_size = atoi(buffer);
  845.         else if (strcmp(var, "GlobalWindCycle") == 0)
  846.             read_cfg_bool(buffer, &wind_cycle);
  847.  
  848.         /* Hilfe-Programm */
  849.         else if (strcmp(var, "HelpProgram") == 0)
  850.             read_cfg_str(buffer, helpprog);
  851.         
  852.         /* Klammerpaare */
  853.         else if (strcmp(var, "KlammerAuf") == 0)
  854.             read_cfg_str(buffer, klammer_auf);
  855.         else if (strcmp(var, "KlammerZu") == 0)
  856.             read_cfg_str(buffer, klammer_zu);
  857.             
  858.         /* Lokales */
  859.         else if (strcmp(var, "LocalBegin") == 0)
  860.         {
  861.             read_cfg_str(buffer, tmp);
  862.  
  863.             /* Sonderfälle */
  864.             if (strcmp(tmp, "*") == 0)
  865.                 muster_nr = 0;
  866.             else if (strcmp(tmp, rsc_string(BINSTR)) == 0)
  867.                 muster_nr = 1;
  868.             else
  869.                 muster_nr++;
  870.  
  871.             lo = &(local_options[muster_nr]);
  872.             strcpy(lo->muster, tmp);
  873.         }
  874.         else if (strcmp(var, "LocalEnd") == 0)
  875.         {
  876.             lo = NULL;
  877.             if (muster_nr == 0)
  878.                 muster_nr = 1;
  879.         }
  880.         else if ((strcmp(var, "LocalBackup") == 0) && (lo != NULL))
  881.             read_cfg_bool(buffer, &(lo->backup));
  882.         else if ((strcmp(var, "LocalBackupExt") == 0) && (lo != NULL))
  883.             read_cfg_str(buffer, lo->backup_ext);
  884.         else if ((strcmp(var, "LocalInsert") == 0) && (lo != NULL))
  885.             read_cfg_bool(buffer, &(lo->einruecken));
  886.         else if ((strcmp(var, "LocalKurzel") == 0) && (lo != NULL))
  887.             read_cfg_str(buffer, lo->kurzel);
  888.         else if ((strcmp(var, "LocalTab") == 0) && (lo != NULL))
  889.             read_cfg_bool(buffer, &(lo->tab));
  890.         else if ((strcmp(var, "LocalTabSize") == 0) && (lo != NULL))
  891.             lo->tabsize = atoi(buffer);
  892.         else if ((strcmp(var, "LocalUmbruch") == 0) && (lo != NULL))
  893.             read_cfg_bool(buffer, &(lo->umbrechen));
  894.         else if ((strcmp(var, "LocalUmbruchLineLen") == 0) && (lo != NULL))
  895.             lo->lineal_len = atoi(buffer);
  896.         else if ((strcmp(var, "LocalUmbruchIns") == 0) && (lo != NULL))
  897.             read_cfg_bool(buffer, &(lo->format_by_paste));
  898.         else if ((strcmp(var, "LocalUmbruchLoad") == 0) && (lo != NULL))
  899.             read_cfg_bool(buffer, &(lo->format_by_load));
  900.         else if ((strcmp(var, "LocalUmbruchAt") == 0) && (lo != NULL))
  901.         {
  902.             read_cfg_str(buffer, lo->umbruch_str);
  903.             str2set(lo->umbruch_str, lo->umbruch_set);
  904.         }
  905.         else if ((strcmp(var, "LocalUmbruchShow") == 0) && (lo != NULL))
  906.             read_cfg_bool(buffer, &(lo->show_end));
  907.         else if ((strcmp(var, "LocalWordSet") == 0) && (lo != NULL))
  908.         {
  909.             read_cfg_str(buffer, lo->wort_str);
  910.             str2set(lo->wort_str,lo->wort_set);
  911.         }        
  912.  
  913.         /* Makro */
  914.         else if (strcmp(var, "Makro") == 0)
  915.             set_makro_str(buffer);
  916.  
  917.         /* Marken */
  918.         else if (strcmp(var, "Marke") == 0)
  919.         {
  920.             read_cfg_str(buffer, filename);
  921.             d = sscanf(buffer + strlen(filename) + 3, "%d \"%[^\"]\" %ld %d", &i, tmp, &y, &x);
  922.             if (d != 4)        /* altes Format (<4.10) ohne " um tmp */
  923.                 sscanf(buffer + strlen(filename) + 3, "%d %s %ld %d", &i, tmp, &y, &x);
  924.             set_marke(i, tmp, filename, y, x);
  925.         }
  926.  
  927.         /* offenen Dateien */
  928.         else if (strcmp(var, "OpenPrj") == 0)
  929.         {
  930.             read_cfg_str(buffer, filename);
  931.             insert_poslist(arglist, filename, 0, 0);
  932.         }
  933.         else if (strcmp(var, "OpenText") == 0)
  934.         {
  935.             read_cfg_str(buffer, filename);
  936.             sscanf(buffer + strlen(filename) + 3, "%ld %d", &y, &x);
  937.             insert_poslist(arglist, filename, x, y);
  938.         }
  939.         
  940.         /* Drucker */
  941.         else if (prn_get_cfg(var, buffer))
  942.             /* do nothing */ ;
  943.  
  944.         /* Ersetzen */
  945.         else if (strcmp(var, "ReplaceBox") == 0)
  946.             sscanf(buffer, "%d %d", &rp_box_x, &rp_box_y);
  947.         else if (strcmp(var, "ReplaceMode") == 0)
  948.             r_modus = atoi(buffer);
  949.         else if (strcmp(var, "ReplaceStr") == 0)
  950.             read_cfg_str(buffer, r_str);
  951.         else if (strcmp(var, "ReplaceHistory") == 0)
  952.         {
  953.             read_cfg_str(buffer, tmp);
  954.             for (i = 0; i < HIST_ANZ; i++)
  955.                 if (r_history[i][0] == EOS)
  956.                     break;
  957.             if (i < HIST_ANZ)
  958.                 strcpy(r_history[i], tmp);
  959.         }
  960.         else if (strcmp(var, "ReplaceUmlautFrom") == 0)
  961.             umlaut_from = atoi(buffer);
  962.         else if (strcmp(var, "ReplaceUmlautTo") == 0)
  963.             umlaut_to = atoi(buffer);
  964.  
  965.         /* Suchen */
  966.         else if (strcmp(var, "SearchFileMask") == 0)
  967.             read_cfg_str(buffer, ff_mask);
  968.         else if (strcmp(var, "SearchFileRek") == 0)
  969.             read_cfg_bool(buffer, &ff_rekursiv);
  970.         else if (strcmp(var, "SearchDown") == 0)
  971.             read_cfg_bool(buffer, &s_vorw);
  972.         else if (strcmp(var, "SearchGlobal") == 0)
  973.             read_cfg_bool(buffer, &s_global);
  974.         else if (strcmp(var, "SearchGrkl") == 0)
  975.             read_cfg_bool(buffer, &s_grkl);
  976.         else if (strcmp(var, "SearchHistory") == 0)
  977.         {
  978.             read_cfg_str(buffer, tmp);
  979.             for (i = 0; i < HIST_ANZ; i++)
  980.                 if (s_history[i][0] == EOS)
  981.                     break;
  982.             if (i < HIST_ANZ)
  983.                 strcpy(s_history[i], tmp);
  984.         }
  985.         else if (strcmp(var, "SearchQuant") == 0)
  986.             read_cfg_bool(buffer, &s_quant);
  987.         else if (strcmp(var, "SearchRound") == 0)
  988.             read_cfg_bool(buffer, &s_round);
  989.         else if (strcmp(var, "SearchWord") == 0)
  990.             read_cfg_bool(buffer, &s_wort);
  991.         else if (strcmp(var, "SearchStr") == 0)
  992.             read_cfg_str(buffer, s_str);
  993.             
  994.         /* SE-Protokoll */
  995.         else if (strcmp(var, "SESave") == 0)
  996.             read_cfg_bool(buffer, &se_autosave);
  997.         else if (strcmp(var, "SESearch") == 0)
  998.             read_cfg_bool(buffer, &se_autosearch);
  999.         else if (strcmp(var, "SEShellName") == 0)
  1000.         {
  1001.             read_cfg_str(buffer, tmp);
  1002.             for (i = 0; i < SHELLANZ; i++)
  1003.                 if (se_shells[i].name[0] == EOS)
  1004.                     break;
  1005.             if (i < SHELLANZ)
  1006.                 strcpy(se_shells[i].name, tmp);
  1007.         }
  1008.  
  1009.         /* Fensterfont */
  1010.         else if (strcmp(var, "WinFontID") == 0)
  1011.             font_id = atoi(buffer);
  1012.         else if (strcmp(var, "WinFontSize") == 0)
  1013.             font_pts = atoi(buffer);
  1014.  
  1015.         /* Fensterposition */
  1016.         else if (strcmp(var, "Window") == 0)
  1017.         {
  1018.             int    class;
  1019.             GRECT    size;
  1020.             
  1021.             sscanf(buffer, "%d %d %d %d %d", &class, &size.g_x, &size.g_y,
  1022.                                                                  &size.g_w, &size.g_h);
  1023.             add_winlist(class, &size);
  1024.         }
  1025.  
  1026.  
  1027.         /* Unbekannte Zeile */
  1028.         else
  1029.         {
  1030.             if (strlen(var) > 28)
  1031.                 var[28] = EOS;
  1032.             snote(1, 0, WRONGINF, var);
  1033.         }
  1034.     }
  1035.     else
  1036.     {
  1037.         if (strlen(zeile) > 28)
  1038.             zeile[28] = EOS;
  1039.         snote(1, 0, WRONGINF, zeile);
  1040.     }
  1041. }
  1042.  
  1043. void option_load(POSENTRY **list)
  1044. {
  1045.     PATH    tmp;
  1046.  
  1047.     if (!get_cfg_path())                    /* keine qed.cfg gefunden */
  1048.         return;
  1049.  
  1050.     fd = fopen(cfg_path, "r");
  1051.     if (fd != NULL)
  1052.     {
  1053.         /* 1. Zeile auf ID checken */
  1054.         fgets(buffer, (int)sizeof(buffer), fd);
  1055.         if (strncmp(buffer, "ID=qed", 6) == 0)
  1056.         {
  1057.             while (fgets(buffer, (int)sizeof(buffer), fd) != NULL)
  1058.             {
  1059.                 if (buffer[strlen(buffer) - 1] == '\n')
  1060.                     buffer[strlen(buffer) - 1] = EOS;
  1061.                 parse_line(list, buffer);
  1062.             }
  1063.         }
  1064.         else
  1065.         {
  1066.             /* Zeile kurzhacken */
  1067.             if (strlen(buffer) > 28)
  1068.                 buffer[28] = EOS;
  1069.             snote(1, 0, WRONGINF, buffer);
  1070.         }
  1071.         fclose(fd);
  1072.         fd = NULL;
  1073.  
  1074.         /* Bildschirm-abhängige Parameter sichern */
  1075.         split_filename(cfg_path, tmp, NULL);
  1076.         strcat(tmp, dsp_name);
  1077.         fd = fopen(tmp, "r");
  1078.         if (fd != NULL)
  1079.         {
  1080.             /* 1. Zeile auf ID checken */
  1081.             fgets(buffer, (int)sizeof(buffer), fd);
  1082.             if (strncmp(buffer, "ID=qed display configuration", 28) == 0)
  1083.             {
  1084.                 while (fgets(buffer, (int)sizeof(buffer), fd) != NULL)
  1085.                 {
  1086.                     if (buffer[strlen(buffer) - 1] == '\n')
  1087.                         buffer[strlen(buffer) - 1] = EOS;
  1088.                     parse_line(list, buffer);
  1089.                 }
  1090.             }
  1091.             else
  1092.             {
  1093.                 /* Zeile kurzhacken */
  1094.                 if (strlen(buffer) > 28)
  1095.                     buffer[28] = EOS;
  1096.                 snote(1, 0, WRONGINF, buffer);
  1097.             }
  1098.  
  1099.             fclose(fd);
  1100.             fd = NULL;
  1101.             
  1102.             if (planes == 1)
  1103.             {
  1104.                 fg_color = BLACK;
  1105.                 bg_color = WHITE;
  1106.             }
  1107.         }
  1108.         /* Zum Schluß noch 'pdlg.qed' */
  1109.         prn_get_cfg("PdlgRead", cfg_path);
  1110.     }
  1111. }
  1112.  
  1113.  
  1114. /******************************************************************************/
  1115. /* Dateioperation: Speichern                                                                    */
  1116. /******************************************************************************/
  1117. void write_cfg_str(char *var, char *value)
  1118. {
  1119.     if (strchr(value, '\"') != NULL)    /* " in value führt zu \" in der Datei */
  1120.     {
  1121.         int    len, i;
  1122.  
  1123.         fprintf(fd, "%s=\"", var);
  1124.         len = (int)strlen(value);
  1125.         for (i = 0; i < len; i++)
  1126.         {
  1127.             if (value[i] == '\"')
  1128.                 fputc('\\', fd);
  1129.             fputc(value[i], fd);
  1130.         }
  1131.         fprintf(fd, "\"\n");
  1132.     }
  1133.     else
  1134.         fprintf(fd, "%s=\"%s\"\n", var, value);
  1135. }
  1136.  
  1137. void write_cfg_int(char *var, int value)
  1138. {
  1139.     fprintf(fd, "%s=%d\n", var, value);
  1140. }
  1141.  
  1142. void write_cfg_long(char *var, long value)
  1143. {
  1144.     fprintf(fd, "%s=%ld\n", var, value);
  1145. }
  1146.  
  1147. void write_cfg_bool(char *var, bool bool)
  1148. {
  1149.     char    str[6];
  1150.     
  1151.     if (bool)
  1152.         strcpy(str, "TRUE");
  1153.     else
  1154.         strcpy(str, "FALSE");
  1155.     fprintf(fd, "%s=%s\n", var, str);
  1156. }
  1157.  
  1158. static void save_open_text(TEXTP t_ptr)
  1159. {
  1160.     WINDOWP    w = get_window(t_ptr->link);
  1161.  
  1162.     if (!t_ptr->namenlos)
  1163.     {
  1164.         if (w->class == CLASS_EDIT)
  1165.         {
  1166.             fprintf(fd, "OpenText=\"%s\" %ld %d\n", t_ptr->filename, t_ptr->ypos,
  1167.                             bild_pos(t_ptr->xpos, t_ptr->cursor_line, t_ptr->loc_opt->tab, t_ptr->loc_opt->tabsize));
  1168.         }
  1169.         if (w->class == CLASS_PROJEKT)
  1170.             write_cfg_str("OpenPrj", t_ptr->filename); 
  1171.     }
  1172. }
  1173.  
  1174. void option_save(void)
  1175. {
  1176.     int        i, x;
  1177.     long        y;
  1178.     char        tmp[50];
  1179.     LOCOPTP    lo;
  1180.  
  1181.     fd = fopen(cfg_path, "w");
  1182.     if (fd != NULL)
  1183.     {
  1184.         /* ID zur identifizierung */
  1185.         fprintf(fd, "ID=qed %s\n", QED_VERSION);
  1186.     
  1187.         /* Autosave */    
  1188.         write_cfg_bool("AutoSavePrj", as_prj);
  1189.         write_cfg_bool("AutoSavePrjAsk", as_prj_ask);
  1190.         write_cfg_int("AutoSavePrjMin", as_prj_min);
  1191.         write_cfg_bool("AutoSaveText", as_text);
  1192.         write_cfg_bool("AutoSaveTextAsk", as_text_ask);
  1193.         write_cfg_int("AutoSaveTextMin", as_text_min);
  1194.  
  1195.         /* Binär-Extionsions */    
  1196.         for (i = 4; i < BIN_ANZ; i++)
  1197.             if (bin_extension[i][0] != EOS)
  1198.                 write_cfg_str("BinExtension", bin_extension[i]);
  1199.  
  1200.         /* Defaultprojekt */
  1201.         write_cfg_str("DefaultPrj", def_prj_path);
  1202.     
  1203.         /* Fehlerzeilen */    
  1204.         for (i = 0; i < FEHLERANZ; i++)
  1205.         {
  1206.             if (error[i][0] != EOS)
  1207.                 write_cfg_str("Error", error[i]);
  1208.         }
  1209.     
  1210.         /* Globales */
  1211.         write_cfg_bool("GlobalAutosaveCfg", save_opt);
  1212.         write_cfg_int ("GlobalBinLineLen", bin_line_len);
  1213.         write_cfg_bool("GlobalBlinkCursor", blinking_cursor);
  1214.         write_cfg_bool("GlobalCtrlBlock", ctrl_mark_mode);
  1215.         write_cfg_bool("GlobalFtoDesk", f_to_desk);
  1216.         write_cfg_bool("GlobalGEMClip", clip_on_disk);
  1217.         write_cfg_bool("GlobalOverwrite", overwrite);
  1218.         write_cfg_int ("GlobalTransSize", transfer_size);
  1219.         write_cfg_bool("GlobalWindCycle", wind_cycle);
  1220.     
  1221.         /* Hilfeprogramm */
  1222.         write_cfg_str("HelpProgram", helpprog);
  1223.     
  1224.         /* Klammerpaare */
  1225.         write_cfg_str("KlammerAuf", klammer_auf);
  1226.         write_cfg_str("KlammerZu", klammer_zu);
  1227.  
  1228.         /* Lokales */    
  1229.         for (i = 0; i < LOCAL_ANZ; i++)
  1230.         {
  1231.             lo = &local_options[i];
  1232.             if (lo->muster[0] != EOS)
  1233.             {
  1234.                 write_cfg_str("LocalBegin", lo->muster);            
  1235.                 write_cfg_bool("LocalBackup", lo->backup);
  1236.                 write_cfg_str("LocalBackupExt", lo->backup_ext);
  1237.                 write_cfg_bool("LocalInsert", lo->einruecken);
  1238.                 write_cfg_str("LocalKurzel", lo->kurzel);
  1239.                 write_cfg_bool("LocalTab", lo->tab);
  1240.                 write_cfg_int("LocalTabSize", lo->tabsize);
  1241.                 write_cfg_bool("LocalUmbruch", lo->umbrechen);
  1242.                 write_cfg_int("LocalUmbruchLineLen", lo->lineal_len);
  1243.                 write_cfg_bool("LocalUmbruchIns", lo->format_by_paste);
  1244.                 write_cfg_bool("LocalUmbruchLoad", lo->format_by_load);
  1245.                 write_cfg_str("LocalUmbruchAt", lo->umbruch_str);
  1246.                 write_cfg_bool("LocalUmbruchShow", lo->show_end);
  1247.                 write_cfg_str("LocalWordSet", lo->wort_str);
  1248.                 write_cfg_str("LocalEnd", lo->muster);            
  1249.             }
  1250.         }
  1251.     
  1252.         /* Makros */
  1253.         for (i = 0; i < MAKRO_ANZ; i++)
  1254.         {
  1255.             if (get_makro_str(i, buffer))
  1256.                 fprintf(fd, "Makro=%s\n", buffer);
  1257.         }
  1258.         
  1259.         /* Marken */
  1260.         for (i = 0; i < MARKEN_ANZ; i++)
  1261.         {
  1262.             if (get_marke(i, tmp, buffer, &y, &x))
  1263.                 fprintf(fd, "Marke=\"%s\" %d \"%s\" %ld %d\n", buffer, i, tmp, y, x);
  1264.         }
  1265.     
  1266.         /* Drucker */
  1267.         prn_save_cfg(cfg_path);
  1268.  
  1269.         /* Ersetzen */
  1270.         write_cfg_int("ReplaceMode", r_modus);
  1271.         write_cfg_str("ReplaceStr", r_str);
  1272.         for (i = 0; i < HIST_ANZ; i++)
  1273.         {
  1274.             if (r_history[i][0] != EOS)
  1275.                 write_cfg_str("ReplaceHistory", r_history[i]);
  1276.         }
  1277.         write_cfg_int("ReplaceUmlautFrom", umlaut_from);                
  1278.         write_cfg_int("ReplaceUmlautTo", umlaut_to);                
  1279.  
  1280.         /* Suchen */
  1281.         write_cfg_str("SearchFileMask", ff_mask);
  1282.         write_cfg_bool("SearchFileRek", ff_rekursiv);
  1283.         write_cfg_bool("SearchDown", s_vorw);
  1284.         write_cfg_bool("SearchGlobal", s_global);
  1285.         write_cfg_bool("SearchGrkl", s_grkl);
  1286.         for (i = 0; i < HIST_ANZ; i++)
  1287.         {
  1288.             if (s_history[i][0] != EOS)
  1289.                 write_cfg_str("SearchHistory", s_history[i]);
  1290.         }
  1291.         write_cfg_bool("SearchQuant", s_quant);
  1292.         write_cfg_bool("SearchRound", s_round);
  1293.         write_cfg_bool("SearchWord", s_wort);
  1294.         write_cfg_str("SearchStr", s_str);
  1295.  
  1296.         /* SE-Protokoll */
  1297.         write_cfg_bool("SESave", se_autosave);
  1298.         write_cfg_bool("SESearch", se_autosearch);
  1299.         for (i = 0; i < SHELLANZ - 1; i++)
  1300.         {
  1301.             if (se_shells[i].name[0] != EOS)
  1302.                 write_cfg_str("SEShellName", se_shells[i].name);
  1303.         }            
  1304.         
  1305.         fclose(fd);
  1306.         fd = NULL;
  1307.  
  1308.         /* Bildschirm-abhängige Parameter sichern */
  1309.         split_filename(cfg_path, tmp, NULL);
  1310.         strcat(tmp, dsp_name);
  1311.         fd = fopen(tmp, "w");
  1312.         if (fd != NULL)
  1313.         {
  1314.             fprintf(fd, "ID=qed display configuration\n");
  1315.  
  1316.             /* Farb-Infos */
  1317.             write_cfg_int("GlobalBgColor", bg_color);
  1318.             write_cfg_int("GlobalFgColor", fg_color);
  1319.  
  1320.             /* geladene Dateien */
  1321.             do_all_text(save_open_text);
  1322.  
  1323.             /* Pos. der Replace-Ask-Box */
  1324.             fprintf(fd, "ReplaceBox=%d %d\n", rp_box_x, rp_box_y);
  1325.  
  1326.             /* Fensterfont */    
  1327.             write_cfg_int("WinFontID", font_id);
  1328.             write_cfg_int("WinFontSize", font_pts);
  1329.     
  1330.             /* Fensterposition */
  1331.             save_winlist(fd);
  1332.  
  1333.             fclose(fd);
  1334.             fd = NULL;
  1335.         }
  1336.     }
  1337.     else
  1338.         note(1, 0, WRITEERR);
  1339. }
  1340.  
  1341.